var mongoose = require('mongoose')
//var bcrypt = require('bcrypt');//存储加密算法
var SALT_WORK_FACTOR=10;

var UserSchema = new mongoose.Schema({
	name:{
		unique:true,
		type:String
	},
	password:String,
	role:{
		type:Number,
		default:0	
	},//0:normal user;1:verified user;2:professional;>10:admin;>50 super admin
	meta:{
		createAt:{
			type:Date,
			default:Date.now()
		},
		updateAt:{
			type:Date,
			default:Date.now()
		}
	}
})

UserSchema.pre('save',function(next){
	var user =this
	if (this.isNew) {
		this.meta.createAt = this.meta.updateAt = Date.now()
	}
	else{
		this.meta.updateAt = Date.now()
	}
	/*bcrypt.genSalt(SALT_WORK_FACTOR,function(err,salt){
		if(err) return next(err)

		bcrypt.hash(user.password,salt,function(err,hash){
			if(err) return next(err)

			user.password=hash
			next()
		})

	})*/
	next()
})

//实例方法实例可以调
UserSchema.methods ={
	comparePassword : function(_password,cb){
		bcrypt.Compare(_password, this.password,function(err,isMatch){
			if (err) {return cb(err)}

			cb(null,isMatch)
		})	
	} 
}

//静态方法模型可以调
UserSchema.statics ={//这个fetch方法没写对导致我开始查不出数据来，数据库操作静态方法
	fetch: function(cb){
		return this
			.find({})
			.sort({'meta.updateAt':-1})
			.exec(cb)//执行查询，并将查询结果传入回调函数cb/
	},
	finById: function(id,cb){
		return this
			.findOne({_id: id})
			.exec(cb)
	}
}

module.exports = UserSchema